/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pl.tewi.types;

import java.util.ArrayList;
import java.util.Set;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * Opis aplikacji tworzony na podstawie adnotacji
 * @author Marcin Kwapisz
 */
public class ApplicationDesc {

    private final String target;
    private final String name;
    private final String applicationPath;
    private final ApplicationType applicationType;
    private final Set<ModuleDesc> modules;
    private final ArrayList<String> descriptors;

    /**
     * Opis aplikacji wygenerowany na podstawie adnotacji
     * @param target decelowy serwer
     * @param name nazwa aplikacji
     * @param basePath ścieżka do aplikacji
     * @param applicationType typ aplikacji {@link ApplicationType}
     * @param modules zbiór modułów
     * @param descriptors  deskryptory instalacyjne aplikacji
     */
    public ApplicationDesc(String target, String name, String basePath, ApplicationType applicationType, Set<ModuleDesc> modules, ArrayList<String> descriptors) {
        this.target = target;
        this.name = name;
        this.applicationPath = basePath;
        this.applicationType = applicationType;
        this.modules = modules;
        this.descriptors = descriptors;
    }

    /**
     * Lista deskryptorów instalacyjnych
     * @return lista deskryptorów instalacyjnych
     */
    public ArrayList<String> getDescriptors() {
        return descriptors;
    }

    /**
     * Typ aplikacji
     * @return typ aplikacji
     */
    public ApplicationType getApplicationType() {
        return applicationType;
    }

    /**
     * Lista modułów aplikacji
     * @return lista modułów
     */
    public Set<ModuleDesc> getModules() {
        return modules;
    }

    /**
     * Ścieżka do aplikacji
     * @return ścieżka do aplikacji
     */
    public String getApplicationPath() {
        return applicationPath;
    }

    /**
     * Pobiera nazwę aplikacji
     * @return nazwa aplikacji
     */
    public String getName() {
        return name;
    }

    /**
     * Pobiera nazwę docelowej instancji serwera aplikacyjnego
     * @return nazwa instacni serwera
     */
    public String getTarget() {
        return target;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ApplicationDesc other = (ApplicationDesc) obj;
        EqualsBuilder builder = new EqualsBuilder();
        return builder.append(this.name, other.name).isEquals();
    }

    @Override
    public int hashCode() {
        HashCodeBuilder builder = new HashCodeBuilder(7, 59);
        return builder.append(name).toHashCode();
    }

    @Override
    public String toString() {

        ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE);
        return builder.append(this.name).append(this.target).append(this.applicationPath).append(this.applicationType).append(this.modules).toString();
    }
}
